/**
 * w : 可编辑
 * n : 整数
 * m : map
 * d : 日期
 * dt: 日期, 时间
 * b : bool
 * $ : 金额
 */
/*eslint-disable*/
import $ from '../http'
// import conInput from '@/tmp/inputsBlur.vue'
// import dao from '@/views/slideShow/dao.js'

const info = data => {
  return $.jsonPost('js/util/Jsonutil/userinfo', data)
}
const info2 = data => {
  return $.jsonPost('js/util/Jsonutil/deptinfo', data)
}
const add = data => {
  return $.jsonPost('/js/pm/pr/add', data)
}

const formatNum = function (f, digit) {
  var m = Math.pow(10, digit)
  return parseInt(f * m, 10) / m
}
// import noImg from "../assets/img/no-img.png";
import { Select, Option } from 'element-ui'
const getTypes = format => {
  if (format) {
    return format.split('-')
  } else {
    return [null, null, null]
  }
}
// w-
const getControl = (e, format, type3) => {
  const h = e.page.$createElement
  if (e.row && e.row.isEmpty) {
    return ''
  }
  const { disabled } = e.form || {}
  const { config } = e.conf
  switch (format) {
    case 'n':
      return h(
        'input',
        {
          class: 'txtbox number',
          domProps: {
            value: e.val
          },
          attrs: {
            disabled
          },
          on: {
            input(ev) {
              const v = ev.target.value
              if (isNaN(v * 1)) {
                ev.target.value = e.row[e.key] || ''
              } else {
                e.row[e.key] = v
              }
              e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row, ev.target)
              e.page.$refs.table.tableData = e.page.$refs.table.tableData
              // e.page.rowData = e.row
              // e.page.$set(e.row, e.key, e.page.val)
            },
            focus(ev) {
              ev.target.select()
            }
          }
        },
        ''
      )
    case '+n':
      return h(
        'input',
        {
          class: 'txtbox number',
          domProps: {
            value: e.val
          },
          attrs: {
            disabled
          },
          on: {
            input(ev) {
              // debugger
              $c.log(ev, 'ev')
              var reg = /^[1-9]\d*$/
              // ev.target.value.replace(reg, "");
              if (!reg.test(ev.target.value)) {
                ev.target.value = ''
              }
              const v = ev.target.value
              if (isNaN(v * 1)) {
                ev.target.value = e.row[e.key] || ''
              } else {
                e.row[e.key] = v
              }
              e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row, ev.target)
              // e.tableData.push({})
            },
            focus(ev) {
              ev.target.select()
            }
          }
        },
        ''
      )
    case '$':
      return h(
        'input',
        {
          class: 'txtbox number',
          domProps: {
            value: e.val ? parseFloat(e.val).toFixed(type3 * 1 || 2) : ''
          },
          attrs: {
            disabled
          },
          on: {
            focus(ev) {
              ev.target.select()
            },
            blur(ev) {
              const v = ev.target.value
              if (isNaN(v)) {
                ev.target.value = e.row[e.key] || ''
              } else {
                e.row[e.key] = v
              }
              ev.target.value = parseFloat(ev.target.value).toFixed(1)
              e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row, ev.target)
            }
          }
        },
        ''
      )
    case 'b':
      return h('input', {
        attrs: {
          type: 'checkbox',
          checked: !!e.val,
          disabled
        },
        on: {
          change(ev) {
            e.page.$set(e.row, e.key, ev.target.checked ? 1 : 0)
            e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row)
          }
        }
      })
    case 'conlist':
      return h(e.conf.el, {
        props: {
          config: {
            // disabled: true ,
            map: {
              dao: dao.resourceSelect,
            },
          },
          // disabled: e.row.ID == 1 ? true : false
        },
        on: {
          change(val) {
            if (JSON.stringify(val) != JSON.stringify(e.row[e.key]) && !!val) {
              // val是绑定的组件的值，需要判断组件是否被赋上值，如果没有赋上值就不要改变list数据，list是计算属性，val的变化会导致list一直变化无限死循环
              e.page.$set(e.row, e.key, val) // $set的使用不光可以this调用，组件实例也可以直接调用去改变该组件的引用数据类型
              e.page.$refs.table.toggleRowSelection(e.row, true)
            }
            //取消选择
            if (val != (e.row[e.key] || '')) {
              e.page.$refs.table.toggleRowSelection(e.row, false)
              e.page.$set(e.row, e.key, val)
            }
          }
        }
      })
    //控制50%
    case 'numver50':
      return h('input', {
        domProps: {
          value: e.val
        },
        on: {
          input(ev) {
            if (ev.target.value > 50 && Number(ev.target.value)) {
              window.$$.msg.error('工作量比不可超过50%')
              ev.target.value = ''
              return
            }
            if (!Number(ev.target.value)) {
              ev.target.value = ''
              return
            }
            e.page.$set(e.row, e.key, ev.target.value)

          }
        }
      })
    //单位
    case 'itemcode':
      return h(e.conf.el, {
        props: {
          config: {
            // disabled: e.row.PROCESS_PROGRESS == 5 || e.row.PROCESS_PROGRESS == 10 ? false : true,
            // dao: dao.wtest,

            map: {
              'mm': 'mm',
              '°': '°',
              'cm':'cm',
              'g':'g',
              'mm²':'mm²',
              'mm³':'mm³'
            },
            // placeholder: e.row.PROCESS_PROGRESS == 5 || e.row.PROCESS_PROGRESS == 10 ? '请选择' : ' '
          },
          value: e.row[e.key],

        },
        on: {
          change(val) {
            if (JSON.stringify(val) != JSON.stringify(e.row[e.key]) && !!val) {
              // val是绑定的组件的值，需要判断组件是否被赋上值，如果没有赋上值就不要改变list数据，list是计算属性，val的变化会导致list一直变化无限死循环
              e.page.$set(e.row, e.key, val) // $set的使用不光可以this调用，组件实例也可以直接调用去改变该组件的引用数据类型
              e.page.$refs.table.toggleRowSelection(e.row, true)
            }

            if (JSON.stringify(val) == JSON.stringify(e.row[e.key])) {
              e.page.$set(e.row, e.key, val)
            }

            //清空推荐等级的值，取消选择
            if (val != (e.row[e.key] || '')) {
              e.page.$refs.table.toggleRowSelection(e.row, false)
              e.page.$set(e.row, e.key, val)
            }
          }
        }
      })
      //产品类型
      case 'productType':
        return h(e.conf.el, {
          props: {
            config,
            value: e.row[e.key],

          },
          on: {
            change(val) {
              if (JSON.stringify(val) != JSON.stringify(e.row[e.key]) && !!val) {
                // val是绑定的组件的值，需要判断组件是否被赋上值，如果没有赋上值就不要改变list数据，list是计算属性，val的变化会导致list一直变化无限死循环
                e.page.$set(e.row, e.key, val) // $set的使用不光可以this调用，组件实例也可以直接调用去改变该组件的引用数据类型
                e.page.$refs.table.toggleRowSelection(e.row, true)
              }

              if (JSON.stringify(val) == JSON.stringify(e.row[e.key])) {
                e.page.$set(e.row, e.key, val)
              }

              //清空推荐等级的值，取消选择
              if (val != (e.row[e.key] || '')) {
                e.page.$refs.table.toggleRowSelection(e.row, false)
                e.page.$set(e.row, e.key, val)
              }
            }
          }
        })
    case 'itemmessage':
      return h(e.conf.el, {
        class: e.row.PROCESS_PROGRESS == 9 ? '' : 'noSeclect',
        props: {
          config: {
            disabled: e.row.PROCESS_PROGRESS == 9 ? false : true,
            map: {
              1: '同意',
              0: '不同意',
              // `${e.row[e.key]}`:e.row[e.key]
            },
            placeholder: e.row.PROCESS_PROGRESS == 9 ? '请选择' : ' '
          },
          value: e.row[e.key]
          // disabled: e.row.ID == 1 ? true : false
        },
        on: {
          change(val) {
            if (JSON.stringify(val) != JSON.stringify(e.row[e.key]) && !!val) {
              // val是绑定的组件的值，需要判断组件是否被赋上值，如果没有赋上值就不要改变list数据，list是计算属性，val的变化会导致list一直变化无限死循环
              e.page.$set(e.row, e.key, val) // $set的使用不光可以this调用，组件实例也可以直接调用去改变该组件的引用数据类型
              e.page.$refs.table.toggleRowSelection(e.row, true)
            }
            // if (JSON.stringify(val) != JSON.stringify(e.row[e.key])) {
            //   e.page.$set(e.row, e.key, val);
            // }

            //取消选择
            if (val != (e.row[e.key] || '')) {
              e.page.$refs.table.toggleRowSelection(e.row, false)
              e.page.$set(e.row, e.key, val)
            }
          }
        }
      })
    case '+c':
      return h('input', {
        // props: {
        //   config,
        //   value: e.val
        // },
        domProps: {
          value: e.val
        },
        on: {
          input(ev) {
            // e.page.$set(e.row, e.key, String(val));
            var reg = /^\d*\.{0,1}\d{0,10}$/
            if (ev.target.value == '' || reg.test(ev.target.value)) {
              e.page.$set(e.row, e.key, ev.target.value)
            } else {
              ev.target.value = ''
              e.page.$set(e.row, e.key, ev.target.value)
            }
            // ev.target.value.replace(reg, "");
            if (!reg.test(ev.target.value)) {
              ev.target.value = ''
              // if (e.row.YEAR_COST_1 && e.row.YEAR_COST_1 && e.row.YEAR_COST_1 && e.row.YEAR_COST_4) {
              if (!e.row.YEAR_COST_2) {
                e.row.YEAR_COST_2 = ''
              }
              if (!e.row.YEAR_COST_1) {
                e.row.YEAR_COST_1 = ''
              }
              if (!e.row.YEAR_COST_3) {
                e.row.YEAR_COST_3 = ''
              }
              if (!e.row.YEAR_COST_4) {
                e.row.YEAR_COST_4 = ''
              }

              var data = [
                Number(e.row.YEAR_COST_1),
                Number(e.row.YEAR_COST_2),
                Number(e.row.YEAR_COST_3),
                Number(e.row.YEAR_COST_4)
              ]

              add({ VALUES: data }).then(res => {
                e.page.$set(e.row, 'YEAR_COST_TOTAL', res)
              })
              // }
              return
            }
            let v = ev.target.value
            if (isNaN(v * 1)) {
              ev.target.value = e.row[e.key] || ''
            } else {
              e.row[e.key] = v
            }
            e.page.$set(e.row, e.key, ev.target.value)
            // debugger;
            // if (e.row.YEAR_COST_1 && e.row.YEAR_COST_1 && e.row.YEAR_COST_1 && e.row.YEAR_COST_4) {
            if (!e.row.YEAR_COST_2) {
              e.row.YEAR_COST_2 = ''
            }
            if (!e.row.YEAR_COST_1) {
              e.row.YEAR_COST_1 = ''
            }
            if (!e.row.YEAR_COST_3) {
              e.row.YEAR_COST_3 = ''
            }
            if (!e.row.YEAR_COST_4) {
              e.row.YEAR_COST_4 = ''
            }
            // var count =
            // Number(e.row.YEAR_COST_1) +
            // Number(e.row.YEAR_COST_2) +
            // Number(e.row.YEAR_COST_3) +
            // Number(e.row.YEAR_COST_4)
            // count = formatNum(count,1)

            var data = [
              Number(e.row.YEAR_COST_1),
              Number(e.row.YEAR_COST_2),
              Number(e.row.YEAR_COST_3),
              Number(e.row.YEAR_COST_4)
            ]

            add({ VALUES: data }).then(res => {
              e.page.$set(e.row, 'YEAR_COST_TOTAL', res)
            })
            // }
          }
        }
      })
    case 'conlist2':
      return h(e.conf.el, {
        class: e.row.NODEID != 'Node14' ? 'isNotSeclect' : '',
        props: {
          config: {
            disabled: e.row.NODEID != 'Node14' ? true : false,
            map: {
              1: '推荐',
              0: '不推荐'
            },
            placeholder: e.row.NODEID != 'Node14' ? ' ' : '请选择'
          },
          value: e.row[e.key]
          // disabled: e.row.ID == 1 ? true : false
        },
        on: {
          change(val) {
            if (JSON.stringify(val) != JSON.stringify(e.row[e.key]) && !!val) {
              // val是绑定的组件的值，需要判断组件是否被赋上值，如果没有赋上值就不要改变list数据，list是计算属性，val的变化会导致list一直变化无限死循环
              e.page.$set(e.row, e.key, val) // $set的使用不光可以this调用，组件实例也可以直接调用去改变该组件的引用数据类型
              e.page.$refs.table.toggleRowSelection(e.row, true)
            }
            //取消选择
            if (val != (e.row[e.key] || '')) {
              e.page.$refs.table.toggleRowSelection(e.row, false)
              e.page.$set(e.row, e.key, val)
            }
          }
        }
      })
    case 'con':
      return h(e.conf.el, {
        props: {
          config,
          value: e.row[e.key]
          // disabled: e.row.ID == 1 ? true : false
        },
        on: {
          change(val) {
            if (JSON.stringify(val) != JSON.stringify(e.row[e.key]) && !!val) {
              // val是绑定的组件的值，需要判断组件是否被赋上值，如果没有赋上值就不要改变list数据，list是计算属性，val的变化会导致list一直变化无限死循环
              e.page.$set(e.row, e.key, val) // $set的使用不光可以this调用，组件实例也可以直接调用去改变该组件的引用数据类型
            }
            if (JSON.stringify(val) != JSON.stringify(e.row[e.key])) {
              e.page.$set(e.row, e.key, val);
            }

            if (val != (e.row[e.key] || "")) {
              e.page.$set(e.row, e.key, val);
            }
          }
        }
      })
    case 'oprate':
      return h(e.conf.el, {
        props: {
          config,
          value: e.row[e.key]
        },
        on: {
          change(val) {
            if (JSON.stringify(val) != JSON.stringify(e.row[e.key]) && !!val) {
              e.page.$set(e.row, e.key, String(val))
              info({ SN: val }).then(r => {
                e.page.$set(e.row, 'WORK_NUMBER', r.CODE)
                e.page.$set(e.row, 'HOME_DEPT', r.DEPARTMENT_NM)
                e.page.$set(e.row, 'HOME_ADDRESS', r.TERRITORY)
              })
            }
          }
        }
      })
    case 'oprate2':
      return h(e.conf.el, {
        class: 'txtbox',
        config: {
          placeholder: '请输入'
        },
          domProps: {
            value: e.row[e.key]
          },
          attrs: {
            disabled
          },
          on: {
            input(ev) {
              if (e.conf.max && ev.target.value.length > e.conf.max) {
                e.page.$set(e.row, e.key, ev.target.value.substring(0, e.conf.max))
              } else {
                e.page.$set(e.row, e.key, ev.target.value)
              }
              e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row)
              e.on.edit()
            },
            focus(ev) {
              ev.target.select()
            }
          }
      })
    case 'thirty':
      return h(
        conInput,
        {
          class: 'txtbox',
          domProps: {
            value: e.row[e.key]
          },
          attrs: {
            disabled,
            // 'show-word-limit': true,
            // type: 'text',
            // maxlength:30
          },
          config: {
            disabled:false
            // autosize:{ minRows: 0, maxRows: 30}
          },
          on: {
            input(ev) {
              console.log(e.conf.max, '输入-----------')
              if (e.conf.max && ev.target.value.length > e.conf.max) {
                e.page.$set(e.row, e.key, ev.target.value.substring(0, e.conf.max))
              } else {
                e.page.$set(e.row, e.key, ev.target.value)
              }
              e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row)
              e.on.edit()
            },
            focus(ev) {
              ev.target.select()
            }
          }
        },
        ''
      )
    case '-link':
      return h(
        'a',
        {
          attr: {
            className: 'link',
            href: 'javascript:;'
          },
          class: {
            link: true,
            b: true
          },
          on: {
            click() {
              if (e.on) {
                if (e.on.click) {
                  e.on.click(e)
                }
              }
            }
          }
        },
        e.val
      )
     case 'serialCode':
      return h(
        'input',
        {
          props: {
            config,
            // value: e.row[e.key]
            // disabled: e.row.ID == 1 ? true : false
          },
          class: 'txtbox',
          domProps: {
            value: e.row[e.key]
          },
          attrs: {
            disabled
          },
          on: {
            input(ev) {
              if (e.conf.max && ev.target.value.length > e.conf.max) {
                e.page.$set(e.row, e.key, ev.target.value.substring(0, e.conf.max))
              } else {
                e.page.$set(e.row, e.key, ev.target.value)
              }
              e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row)
              e.on.edit()
            },
            focus(ev) {
              ev.target.select()
            }
          }
        },
        ''
      )
    default:
      return h(
        'input',
        {
          class: 'txtbox',
          domProps: {
            value: e.row[e.key]
          },
          attrs: {
            disabled
          },
          on: {
            input(ev) {
              if (e.conf.max && ev.target.value.length > e.conf.max) {
                e.page.$set(e.row, e.key, ev.target.value.substring(0, e.conf.max))
              } else {
                e.page.$set(e.row, e.key, ev.target.value)
              }
              e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row)
              e.on.edit()
            },
            focus(ev) {
              ev.target.select()
            }
          }
        },
        ''
      )
  }
}
// m-
const getMap = (e, format, type3) => {
  const h = e.page.$createElement
  const types = ['', 'success', 'info', 'warning', 'danger']
  let options
  const map = e.page.cfg.maps[type3]
  if (!map) {
    return `maps[${type3}]丢失`
  }
  switch (format) {
    case 'w':
      options = []
      for (const key in map) {
        options.push(
          h(Option, {
            props: {
              key: key,
              value: key,
              label: map[key].txt || map[key],
              disabled: map[key].disabled
            }
          })
        )
      }
      return h(
        Select,
        {
          class: 'txtbox',
          props: {
            filterable: true,
            clearable: true,
            value: String(e.val || '')
          },
          on: {
            change(ev) {
              e.page.$set(e.row, e.key, ev)
              if (map[ev]) {
                const item = map[ev].other
                if (item) {
                  for (const key in item) {
                    e.page.$set(e.row, key, item[key])
                  }
                }
              }
              e.page.on && e.page.on.rowChange && e.page.on.rowChange(e.key, e.row)
            }
          }
        },
        options
      )
    case 't':
      if (map[e.val + '']) {
        return h(
          'el-tag',
          {
            attrs: {
              size: 'mini',
              effect: 'dark',
              type: types[e.val]
            }
          },
          map[e.val + '']
        )
      }
      return ''
    default:
      if (map) {
        if (map[e.val + '']) {
          const item = map[e.val + ''].other
          if (item) {
            for (const key in item) {
              e.page.$set(e.row, key, item[key])
            }
          }
          return map[e.val + ''].txt || map[e.val + '']
        } else {
          return ''
        }
      }
  }
}
// 空-
const getValue = (e, format, type3) => {
  if (!e.val && typeof e.val !== 'number') {
    return ''
  } else {
    const h = e.page.$createElement
    const config = e.conf.config || {}
    switch (format) {
      case 'find':
        if (!e.searchList[e.key] || e.val.indexOf(e.searchList[e.key]) < 0) {
          return e.val
        }
        return h('span', {}, [
          e.val.substring(0, e.val.indexOf(e.searchList[e.key])),
          h(
            'span',
            {
              class: {
                red: true
              }
            },
            e.searchList[e.key]
          ),
          e.val.substring(e.val.indexOf(e.searchList[e.key]) + e.searchList[e.key].length)
        ])
      case '$':
        return parseFloat(e.val).toFixed(type3 * 1 || 2)
      case 'n':
        return parseInt(e.val)
      case 'd':
        return dateFormat(e.val)
      case 'dt':
        return dateFormat(e.val, 'yyyy-MM-dd hh:mm')
      case 'consave':
        return e.conf.config.map.filter(s => s.key == e.val)[0].txt
      case 'imgsave':
        return h(
          'img',
          {
            attrs: {
              class: 'el-table-img',
              src: e.val[0].FILE_URL
            }
          },
          ''
        )
      case 'ml':
        if (e.val && e.val.length) {
          return h(
            'div',
            e.val.map(function (item) {
              return h(
                'div',
                {
                  style:
                    'line-height: 1.5;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;display: block;flex:1'
                },
                item.CHECK_DEPT_NM + '/' + item.CHECK_USER_NM + '/' + item.CHECK_OPINION
              )
            })
          )
        } else {
          return e.val
        }
      case 'open':
        return h(
          'a',
          {
            attr: {
              className: 'link',
              href: 'javascript:;'
            },
            style: 'color:#13A8A8;cursor:pointer',
            on: {
              click() {
                e.conf.cliks(e.row)
              }
            }
          },
          e.val
        )
      case 'openImg':
        return h(
          'a',
          {
            attr: {
              className: 'link',
              href: 'javascript:;'
            },
            style: 'color:#13A8A8;cursor:pointer',
            on: {
              click() {
                window.open(e.row.FILE_URL)
              }
            }
          },
          e.row.FILE_NM
        )
      case 'reds':
        return h(
          'a',
          {
            style: e.row.RED_REMARK == 1 ? 'color:#FF0000;' : ''
          },
          e.val
        )
      case 'link':
        return h(
          'a',
          {
            attr: {
              className: 'link',
              href: 'javascript:;'
            },
            class: {
              link: true,
              b: true
            },
            on: {
              click() {
                if (e.on) {
                  if (e.on.click) {
                    e.on.click(e)
                  }
                }
              }
            }
          },
          e.val
        )
      case 'img':
        return h(
          'img',
          {
            attrs: {
              class: 'el-table-img',
              src: e.row[e.key]
            },
            style: {
              height: config.height || '',
              width: config.width || ''
            },
            on: {
              error(e) {
                e.target.className += ' err-img'
                e.target.src = noImg
              }
            }
          },
          ''
        )
      case 'imgUpload':
        return h(
          'a',
          {
            class: {
              link: true,
              b: true
            },
            style: 'color:#13A8A8;cursor:pointer',
            on: {
              click() {
                window.open(e.val.length == 0 ? '' : e.val[0].FILE_URL)
              }
            }
          },
          e.val.length == 0 ? '' : e.val[0].FILE_NM
        )
      default:
        return e.val
    }
  }
}
// 日期格式化
const dateFormat = (date, fmt = 'yyyy-MM-dd') => {
  if (!date) {
    return date
  } else {
    date = new Date(date)
  }
  const opt = {
    'y+': date.getFullYear().toString(), // 年
    'M+': (date.getMonth() + 1).toString(), // 月
    'd+': date.getDate().toString(), // 日
    'h+': date.getHours().toString(), // 时
    'm+': date.getMinutes().toString(), // 分
    's+': date.getSeconds().toString() // 秒
    // 有其他格式化字符需求可以继续添加，必须转化成字符串
  }
  let ret
  for (const k in opt) {
    ret = new RegExp('(' + k + ')').exec(fmt)
    if (ret) {
      fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'))
    }
  }
  return fmt
}
export default e => {
  if (!e.config.edit && e.format) {
    e.format = e.format.replace('w-', '-')
  }
  const formatList = getTypes(e.format)
  switch (formatList[0]) {
    case 'w':
      return getControl(e, formatList[1], formatList[2])
    case 'm':
      return getMap(e, formatList[1], formatList[2])
    default:
      return getValue(e, formatList[1], formatList[2])
  }
}
